package tech.windanchaos.blog.service;

import org.springframework.stereotype.Component;
import tech.windanchaos.blog.entity.*;

import java.util.ArrayList;
import java.util.List;
import java.util.Locale;

@Component
public interface ArticleService {
    /**
     * 取分页的博客数据
     * @param start
     * @param limit
     * @return
     */
    List<ArticleDes> getArticlesByPage(int start, int limit);
    List<ArticleDes> getArticlesByPageAdmin(Integer start, Integer limit);
    /**
     * 全部博客
     * @return
     */
    List<ArticleDes> getAllArticles();
    /**
     * 文章类别
     */
    List<ArticleCategory> getArticleCategoryList();
    /**
     *文章归档
     */
    List<ArticleArchive> getArticleArchive(int start, int limit);
    /**
     * 通过id来查询文章的分类
     */
    List<Category> getCategoriesByArticleID(int id);
    /**通过分类id查分类
     *
     */
    Category getCategoryByID(int id);
    /**
     * 博客正文
     */
    Article getArticleByID(int id);

    /**
     * 分类下的文章列表
     */
    List<ArticleDes> getArticleDesByCategoryID(int id);

    /**
     * 标签页面
     */
    List<ArticleTag> getArticleTagList();
    /**
     * 通过标签ID查询标签文章List
     */
    List<ArticleDes> getArticleDesByTagID(Integer id);
    Tag getTagByID(Integer id);

    /**
     * 查询所有分类
     */
    List<Category> getAllCategory();

    /**
     * 搜索文章
     */
    List<ArticleDes> searchBlogByCategoryIdAndTitle(SearchBody searchBody);
    /**
     * 通过分类名查找分类
     */
    Category getCategoryByName(String name);

    /**
     * 新增、更新分类
     */
    void addCategory(String name);
    void updateCategory(Category category);
    void delCategory(Integer id);
    /**
     * 添加、更新、删除标签
     */
    List<Tag> getAllTags();
    Tag getTagByName(String name);
    void addTag(String name);
    void updateTag(Tag tag);
    void delTag(Integer id);

    /**
     * 后台博客文章管理
     */
    Article getArticleById(Integer id);
    //文章的分类和标签
    List<Category> getArticleCategoryById(Integer id);
    List<Tag> getArticleTagById(Integer id);
    Integer insertArticle(Article blog);
    void updateArticle(Article article);
    //处理前端传值string，转成List<Integer>
    List<Integer> splitValues(String values);
    String commitCategoryValues(List<Category> values);
    String commitTagsValues(List<Tag> values);
    //更新文章的分类，一对多,用先删，后插的方式更新，避免过于复杂的判定
    void categoryUpdate(Integer id,List<Integer> categoryIds);
    void tagsUpdate(Integer id,List<Integer> tagIds);
    void deleteArticle(Integer id);

}
